<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
/*
广义上的闭包:
    只要一个函数, 访问这个函数外的变量, 那么这个函数就是一个闭包

狭义上的闭包:
    如果一个函数, 访问了她的外部函数的局部变量, 那么这个函数就是一个闭包
    
闭包的特点:
    闭包可以访问它的外部函数作用域内的任何的变量, 而且访问到的变量的值
一定是最新的值!  即使外部函数执行结束了, 也能访问外部函数的局部变量
 */
var a = 10;
function foo(){
    var b = 20;
    function f(){
        return b;
    }
    b = 30;
    return f
}

var b = foo()();
console.log(b);
</script>
</body>
</html>